package com.clps.algorithm03.二分查找;


/**
 * 二分查找方法,他是一种高校的查找方法,
 *
 */
public class demo1 {
    public static void main(String[] args) {
        int [] nums = {1,2,3};
        int target = 2;

        /**
         * 循环的终止条件是区间为空,没有数据可查询了,只要left <=right,就可以继续查找,当left ==righrt,说明区间只有一个数字,还可以继续查找,当
         * left>rigjt说明可查找的区间为空,所以查找的条件表 就是left <=rigjt,循环终止条件left>right</=rigjt,循环终止条件left>
         */
        search(nums,target);
    }

    private static int search(int[] nums, int target) {
        int left = 0;  //查找左边界
        int right = nums.length-1;  //查找右边界
        while (left <=right){ //有效的区间查找
            //找到区间内的元素,
            int mid = (left+right) >>>1;//这里不用担心是否内存溢出
            if(target ==  nums[mid]){ //如果找到了直接返回
                return mid;
            } else if (target<nums[mid]) { //如果查找不到的值小于中间元素,缩小右边界
                right = mid-1;
            }else{
                left = mid+1; //如果查找的值大于中间的元素,缩小左边界
            }
        }
        return -1; //没找到,返回-1.
    }
}
